import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';
import Login from './views/Login.vue';

import store from './store';
import vm from './main';

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      meta: {
        noAuth: true,
      },
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
    },
  ],
});

router.beforeEach((to, from, next) => {
  if (to.meta.noAuth) {
    next();
  } else {
    store.dispatch('checkLogin').then(() => {
      next();
    }).catch(() => {
      store.dispatch('userLogout').then(() => {
        vm.$router.replace({
          name: 'login',
          query: {
            url: to.fullPath,
          },
        });
      });
    });
  }
});

export default router;